<?php

class PlacesController extends Controller
{
	public function actionIndex()
	{
        $model = new Places('Search');
        $model->unsetAttributes();
		if(isset($_GET['Places']))
			$model->attributes=$_GET['Places'];
		$this->render('index', array('model'=>$model));
	}
    
    public function actionCreate()
    {
        $model = new Places;
        $placeImage = new PlaceImages;
        $placeLocation = new PlaceLocations;
        $placeProfile = new PlaceProfile;
        $placeSocial = new PlaceSocial;
        
        if (isset($_POST['Places']) && isset($_POST['PlaceLocations']) && isset($_POST['PlaceProfile']) && isset($_POST['PlaceSocial']))
        {
            $transaction = Yii::app()->db->beginTransaction();
            try
            {
                // PLACES
                $model->attributes = $_POST['Places'];
                $date = new DateTime();
                $model->createddate = $date->format('Y-m-d H:m:s');
                $imagePath = IMAGES_DIR . 'places/' . date('Ymd', strtotime($model->createddate)) . '/';
				if (!file_exists($imagePath)) {
    					mkdir($imagePath, 0777, true);
    				}
    			$imageUploadFile	= CUploadedFile::getInstance($model, 'image');
    			if ($imageUploadFile !== null) {
    				$model->image = $this->createSlug($model->title). '.' . $imageUploadFile->extensionName;
    				$imageUploadFile->saveAs($imagePath . $model->image);
    				// Resize images
    				// $this->resizeImage($imagePath, $model->image, date('Y-m-d H:i:s'));
    			}
                if (!$model->save())
                {
                    throw new CHttpException('error', 'Tạo địa điểm tổ chức không thành công. Bạn hãy thực hiện lại');
                }
                // END PLACES
                
                // PLACES IMAGES
                    $images = CUploadedFile::getInstancesByName('PlaceImages[images]');
                    if (isset($images) && count($images) > 0)
                    {
                        foreach($images as $k=>$data)
                        {
                            $addImage = new PlaceImages;
                            $addImage->image = $this->createSlug($model->title).'-'.$k.'.'.$data->extensionName;
                            $data->saveAs($imagePath.$addImage->image);
                            $addImage->place_id = $model->id;
                            if (!$addImage->save())
                            {
                                throw new CHttpException('error', 'Tạo địa điểm tổ chức không thành công. Bạn hãy thực hiện lại');
                            }
                        }
                    }
                // END PLACES IMAGES
                
                // PLACES LOCATION
                $placeLocation->attributes = $_POST['PlaceLocations'];
                $placeLocation->place_id = $model->id;
                $imageUploadFile	= CUploadedFile::getInstance($placeLocation, 'map');
    			if ($imageUploadFile !== null) {
    				$placeLocation->map = $this->createSlug($model->title). '-map.' . $imageUploadFile->extensionName;
    				$imageUploadFile->saveAs($imagePath . $placeLocation->map);
    				// Resize images
    				// $this->resizeImage($imagePath, $model->image, date('Y-m-d H:i:s'));
    			}
                if (!$placeLocation->save())
                {
                    throw new CHttpException('error', 'Tạo địa điểm tổ chức không thành công. Bạn hãy thực hiện lại');
                }
                // END PLACES LOCATION
                
                // PLACES PROFILE
                $placeProfile->attributes = $_POST['PlaceProfile'];
                $placeProfile->place_id = $model->id;
                if (!$placeProfile->save())
                {
                    throw new CHttpException('error', 'Tạo địa điểm tổ chức không thành công. Bạn hãy thực hiện lại');
                }
                //END PLACES PROFILE
                
                // PLACES SOCIAL
                foreach($_POST['PlaceSocial']['social_id'] as $k=>$data)
                {
                    $addSocial = new PlaceSocial;
                    $addSocial->social_id = $_POST["PlaceSocial"]['social_id'][$k];
                    $addSocial->url = $_POST["PlaceSocial"]['url'][$k];
                    $addSocial->place_id = $model->id;
                    if (!$addSocial->save())
                    {
                        throw new CHttpException('error', 'Tạo địa điểm tổ chức không thành công. Bạn hãy thực hiện lại');
                    }
                }
                // END PLACES SOCIAL
                $transaction->commit();
                $this->redirect(array('view', 'id'=>$model->id));
            }catch (Exception $e)
            {
                $transaction->rollBack();
            }
            
        }
        $this->render('create', array(
            'model'=>$model,
            'placeImage'=>$placeImage,
            'placeLocation'=>$placeLocation,
            'placeProfile'=>$placeProfile,
            'placeSocial'=>$placeSocial
        ));
    }
    
    public function actionView($id)
    {
        $model = Places::model()->findByPk($id);
        if ($model == null)
            throw new CHttpException(404, 'Yêu cầu của bạn không thể thực hiện.');
        $this->render('view', array('model'=>$model));
    }
    
    public function actionUpdate($id)
    {
        $model = Places::model()->findByPk($id);
        if ($model == null)
            throw new CHttpException(404, 'Yêu cầu của bạn không thể thực hiện.');
        $placeImage = new PlaceImages;
        $listImage = PlaceImages::model()->findAllByAttributes(array('place_id'=>$model->id));
        $placeLocation = PlaceLocations::model()->findByAttributes(array('place_id'=>$model->id));
        $placeProfile = PlaceProfile::model()->findByAttributes(array('place_id'=>$model->id));
        $placeSocial = PlaceSocial::model()->findAllByAttributes(array('place_id'=>$model->id));
		$thumbnail = $model->image;
		$map = $placeLocation->map;
        if (isset($_POST['Places']) && isset($_POST['PlaceLocations']) && isset($_POST['PlaceProfile']) && isset($_POST['PlaceSocial']))
        {
            $transaction = Yii::app()->db->beginTransaction();
            try
            {
                // PLACES
                $model->attributes = $_POST['Places'];
                $date = new DateTime();
                $model->createddate = $date->format('Y-m-d H:m:s');
                $imagePath = IMAGES_DIR . 'places/' . date('Ymd', strtotime($model->createddate)) . '/';
				if (!file_exists($imagePath)) {
    					mkdir($imagePath, 0777, true);
    				}
    			$imageUploadFile	= CUploadedFile::getInstance($model, 'image');
    			if ($imageUploadFile !== null) {
    				$model->image = $this->createSlug($model->title). '.' . $imageUploadFile->extensionName;
    				$imageUploadFile->saveAs($imagePath . $model->image);
    				// Resize images
    				// $this->resizeImage($imagePath, $model->image, date('Y-m-d H:i:s'));
    			}else
				{
					$model->image = $thumbnail;
				}
                if (!$model->save())
                {
                    throw new CHttpException('error', 'Cập nhật địa điểm tổ chức không thành công. Bạn hãy thực hiện lại');
                }
                // END PLACES
                
                // PLACES IMAGES
                    $images = CUploadedFile::getInstancesByName('PlaceImages[images]');
                    if (isset($images) && count($images) > 0)
                    {
                        foreach($images as $k=>$data)
                        {
                            $addImage = new PlaceImages;
                            $addImage->image = $this->createSlug($model->title).'-'.$k.'.'.$data->extensionName;
                            $data->saveAs($imagePath.$addImage->image);
                            $addImage->place_id = $model->id;
                            if (!$addImage->save())
                            {
                                throw new CHttpException('error', 'Cập nhật địa điểm tổ chức không thành công. Bạn hãy thực hiện lại');
                            }
                        }
                    }
                // END PLACES IMAGES
                
                // PLACES LOCATION
                $placeLocation->attributes = $_POST['PlaceLocations'];
                $placeLocation->place_id = $model->id;
                $imageUploadFile	= CUploadedFile::getInstance($placeLocation, 'map');
    			if ($imageUploadFile !== null) {
    				$placeLocation->map = $this->createSlug($model->title). '-map.' . $imageUploadFile->extensionName;
    				$imageUploadFile->saveAs($imagePath . $placeLocation->map);
    				// Resize images
    				// $this->resizeImage($imagePath, $model->image, date('Y-m-d H:i:s'));
    			}else
				{
					$placeLocation->map = $map;
				}
                if (!$placeLocation->save())
                {
                    throw new CHttpException('error', 'Cập nhật địa điểm tổ chức không thành công. Bạn hãy thực hiện lại');
                }
                // END PLACES LOCATION
                
                // PLACES PROFILE
                $placeProfile->attributes = $_POST['PlaceProfile'];
                $placeProfile->place_id = $model->id;
                if (!$placeProfile->save())
                {
                    throw new CHttpException('error', 'Cập nhật địa điểm tổ chức không thành công. Bạn hãy thực hiện lại');
                }
                //END PLACES PROFILE
                
				// DEL PLACES SOCIAL
				foreach($placeSocial as $data)
				{
					if (!$data->delete())
					{
						throw new CHttpException('error', 'Cập nhật địa điểm tổ chức không thành công. Bạn hãy thực hiện lại');
					}
				}
				// END DEL PLACES SOCIAL
				
                // PLACES SOCIAL
                foreach($_POST['PlaceSocial']['social_id'] as $k=>$data)
                {
                    $addSocial = new PlaceSocial;
                    $addSocial->social_id = $_POST["PlaceSocial"]['social_id'][$k];
                    $addSocial->url = $_POST["PlaceSocial"]['url'][$k];
                    $addSocial->place_id = $model->id;
                    if (!$addSocial->save())
                    {
                        throw new CHttpException('error', 'Tạo địa điểm tổ chức không thành công. Bạn hãy thực hiện lại');
                    }
                }
                // END PLACES SOCIAL
                $transaction->commit();
                $this->redirect(array('view', 'id'=>$model->id));
            }catch (Exception $e)
            {
                $transaction->rollBack();
            }
            
        }
        $this->render('update', array(
            'model'=>$model,
            'placeImage'=>$placeImage,
            'placeLocation'=>$placeLocation,
            'placeProfile'=>$placeProfile,
            'placeSocial'=>$placeSocial,
            'listImage'=>$listImage,
        ));
    }
	
	public function actionDelete($id)
	{
		$model = Places::model()->findByPk($id);
		if ($model === null)
			throw new CHttpException(404, "Yêu cầu của bạn không thể thực hiện");
		$listPlaceImage = PlaceImages::model()->findAllByAttributes(array('place_id'=>$id));
		$placeLocation = PlaceLocations::model()->findByAttributes(array("place_id"=>$id));
		$placeProfile = PlaceProfile::model()->findByAttributes(array('place_id'=>$id));
		$listPlaceSocial = PlaceSocial::model()->findAllByAttributes(array('place_id'=>$id));
		$imagePath = IMAGES_DIR . 'places/' . date('Ymd', strtotime($model->createddate)) . '/';
		$thumbnail = $model->image;
		$map = $placeLocation->map;
		if ($model->delete())
		{
			if (file_exists($imagePath.$thumbnail))
				unlink($imagePath.$thumbnail);
		}
		foreach($listPlaceImage as $data)
		{
			$tempImage = $data->image;
			if ($data->delete())
			{
				if (file_exists($imagePath.$tempImage))
					unlink($imagePath.$tempImage);
			}
		}
		if ($placeLocation->delete())
		{
			if (file_exists($imagePath.$map))
				unlink($imagePath.$map);
		}
		$placeProfile->delete();
		foreach($listPlaceSocial as $data)
		{
			$data->delete();
		}
		
		// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
		if(!isset($_GET['ajax']))
			$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
	}

}